package com.example.springmvc_demo;

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.naming.NamingEnumeration;
import java.io.File;
import java.util.Arrays;
import java.util.List;

@RequestMapping("/request")
@RestController
public class RequestController {
    @RequestMapping("/hello")
//    @RequestMapping  客户端与服务器之间建立连接
//    既可以修饰 类 又可以修饰 方法
//    当其修饰类时,访问方法为:类路径 + 方法路径   例: /request/hello

//    Http状态码:
//    200为成功
//   4**  客户端错误，请求包含语法错误或无法完成请求    400为语法错误
//   5**  服务器错误，服务器在处理请求的过程中发生了错误
    public String say(){
        return "hello Spring MVC";
    }
    @RequestMapping("/r1")
    public String p1( String name){
        return "收到请求: name: "+name;
    }
    @RequestMapping("/r2")
    public String p2( Integer name){
        return "收到请求: name: "+name;
    }
    @RequestMapping("/r3")
    public String p3( Integer name){
//        在接口中一般不使用基本数据类型, 使用 引用数据 Integer
        return "收到请求: name: "+name;
    }
    @RequestMapping("/r4")
    public String p4( String name,Integer age){
        return "收到请求: name: "+name+" age: "+age;
    }
    @RequestMapping("/r5")
    public String p5( Student student){
//        可以传递对象  Student类
//        此时使用基本数据类型会初始化
        return "收到请求: student:"+student;
    }
    @RequestMapping("/r6")
    public String p6(@RequestParam("name") String userName){
//        这是把 userName 用 name 替换  "后端参数重命名"
//        参数必传   参数重命名
        return "收到请求: name: "+userName;
    }
    @RequestMapping("/r7")
    public String p7(@RequestParam(value = "name",required = false) String userName){
//     添加required = false之后, 参数改为不必传
        return "收到请求: name: "+userName;
    }
    @RequestMapping("/r8")
    public String p8( String [] name){
//        数组传参   两种方式
//        127.0.0.1:8080/request/r8?name=12,12,23,45,44
//        127.0.0.1:8080/request/r8?name=12&name=12&name=23&name=45&name=44
        return "收到请求: name: "+ Arrays.toString(name);
    }
    @RequestMapping("/r9")
    public String p9( @RequestParam List<String> list){
//        传递集合   要使⽤  @RequestParam 绑定参数关系
//        访问方式与上述数组相同
        return "接收参数, list:"+list;
    }
    @RequestMapping("/r10")
    public String r10(@RequestBody Student student){
//        接收json
//        jsons 是一种特殊的字符串 可以表示对象的字符串
        return "接收参数, student: "+student;
    }
    @RequestMapping("/article/{articleId}/{name}")
    public String r11(@PathVariable("articleId") Integer articleId, @PathVariable("name") String name) {
        // 从路径中获取参数
        return "接收参数, articleId: " + articleId + ", name: " + name;
    }
    @RequestMapping("/r13")
    public String r13(@RequestPart ("file")MultipartFile file1){
//        上传文件    @RequestPart 与 上文 @RequestParam 类似 重命名
        String originalFilename = file1.getOriginalFilename();
        return "收到文件: 文件名称: "+ originalFilename;
    }

}
